Ant Design Vue or AntD Vue, is a useful UI framework made for Vue.js.
In this article, we’ll look at how to use it in our Vue apps.
Menu Theme
We can set the theme
prop to change the menu theme:
<template>
<div id="app">
<a-menu
style="width: 256px"
:default-selected-keys="['1']"
:default-open-keys="['sub1']"
mode="inline"
:theme="theme"
:selected-keys="[current]"
@click="handleClick"
>
<a-menu-item key="1">
<a-icon type="mail"/>Navigation One
</a-menu-item>
<a-menu-item key="2">
<a-icon type="calendar"/>Navigation Two
</a-menu-item>
<a-sub-menu key="sub1">
<span slot="title">
<a-icon type="appstore"/>
<span>Navigation Three</span>
</span>
<a-menu-item key="3">Option 3</a-menu-item>
<a-menu-item key="4">Option 4</a-menu-item>
<a-sub-menu key="sub1-2" title="Submenu">
<a-menu-item key="5">Option 5</a-menu-item>
<a-menu-item key="6">Option 6</a-menu-item>
</a-sub-menu>
</a-sub-menu>
<a-sub-menu key="sub2">
<span slot="title">
<a-icon type="setting"/>
<span>Navigation Four</span>
</span>
<a-menu-item key="7">Option 7</a-menu-item>
<a-menu-item key="8">Option 8</a-menu-item>
</a-sub-menu>
</a-menu>
</div>
</template>
<script>
export default {
name: "App",
data() {
return {
current: "1",
theme: "dark"
};
},
methods: {
handleClick(e) {
console.log("click ", e);
this.current = e.key;
},
changeTheme(checked) {
this.theme = checked ? "dark" : "light";
}
}
};
</script>
Page Header
We can add a page header with the a-page-header
component:
<template>
<div id="app">
<a-page-header
style="border: 1px solid rgb(235, 237, 240)"
title="Title"
sub-title="This is a subtitle"
@back="() => null"
/>
</div>
</template>
<script>
export default {
name: "App"
};
</script>
We add the title
and sub-title
props to add the title and subtitles.
The back
event is emitted when we click the back button.
We can add it with breadcrumbs with the breadecrumbs
prop:
<template>
<div id="app">
<a-page-header
style="border: 1px solid rgb(235, 237, 240)"
title="Title"
:breadcrumb="{ props: { routes } }"
sub-title="This is a subtitle"
/>
</div>
</template>
<script>
export default {
name: "App",
data() {
return {
routes: [
{
path: "index",
breadcrumbName: "First-level Menu"
},
{
path: "first",
breadcrumbName: "Second-level Menu"
}
]
};
}
};
</script>
We can populate the extra
slot of the a-page-header
with our own content:
<template>
<div id="app">
<a-page-header
style="border: 1px solid rgb(235, 237, 240)"
title="Title"
sub-title="This is a subtitle"
@back="() => $router.go(-1)"
>
<template slot="extra">
<a-button key="2">Operation</a-button>
<a-button key="1" type="primary">Primary</a-button>
</template>
<a-descriptions size="small" :column="3">
<a-descriptions-item label="Created">james smith</a-descriptions-item>
<a-descriptions-item label="Title">Writer</a-descriptions-item>
</a-descriptions>
</a-page-header>
</div>
</template>
<script>
export default {
name: "App"
};
</script>
We add the extra
slot and populate it with buttons.
Also, we populate the default slot with the a-description
component to add more content.
We can also set the background by setting the background color on the container and setting the ghost
prop to false
to show the background:
<template>
<div style="background-color: #F5F5F5; padding: 24px;">
<a-page-header
:ghost="false"
title="Title"
sub-title="This is a subtitle"
@back="() => $router.go(-1)"
>
<template slot="extra">
<a-button key="2">Operation</a-button>
<a-button key="1" type="primary">Primary</a-button>
</template>
<a-descriptions size="small" :column="3">
<a-descriptions-item label="Created">james smith</a-descriptions-item>
<a-descriptions-item label="Title">Writer</a-descriptions-item>
</a-descriptions>
</a-page-header>
</div>
</template>
<script>
export default {
name: "App"
};
</script>
Conclusion
We can set a theme for menus and add a page header to our Vue app with Ant Design Vue.